<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/sem.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/sem.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1NFTV9IXzA_"><span class="b">_LINUX_SEM_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1NFTV9IXzA_"><span class="b">_LINUX_SEM_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">atomic</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">rcupdate</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">cache</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">uapi</span><span class="f">/</span><span class="b">linux</span><span class="f">/</span><span class="b">sem</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="m">struct</span> <span class="b">task_struct</span><span class="f">;</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="k">/* One sem_array data structure for each set of semaphores in the system. */</span>
<a name="12" /><span class="True">      12:</span> <span class="m">struct</span> <span class="b">sem_array</span> <span class="f">{</span>
<a name="13" /><span class="True">      13:</span>     <span class="m">struct</span> <span class="b">kern_ipc_perm</span>    <a href="cpu.c_macros_ref.html#_X19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcF8w"><span class="b">____cacheline_aligned_in_smp</span></a>
<a name="14" /><span class="True">      14:</span>                 <span class="b">sem_perm</span><span class="f">;</span>    <span class="k">/* permissions .. see ipc.h */</span>
<a name="15" /><span class="True">      15:</span>     <span class="b">time_t</span>            <span class="b">sem_ctime</span><span class="f">;</span>    <span class="k">/* last change time */</span>
<a name="16" /><span class="True">      16:</span>     <span class="m">struct</span> <span class="b">sem</span>        <span class="f">*</span><span class="b">sem_base</span><span class="f">;</span>    <span class="k">/* ptr to first semaphore in array */</span>
<a name="17" /><span class="True">      17:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">pending_alter</span><span class="f">;</span>    <span class="k">/* pending operations */</span>
<a name="18" /><span class="True">      18:</span>                         <span class="k">/* that alter the array */</span>
<a name="19" /><span class="True">      19:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">pending_const</span><span class="f">;</span>    <span class="k">/* pending complex operations */</span>
<a name="20" /><span class="True">      20:</span>                         <span class="k">/* that do not alter semvals */</span>
<a name="21" /><span class="True">      21:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">list_id</span><span class="f">;</span>    <span class="k">/* undo requests on this array */</span>
<a name="22" /><span class="True">      22:</span>     <span class="m">int</span>            <span class="b">sem_nsems</span><span class="f">;</span>    <span class="k">/* no. of semaphores in array */</span>
<a name="23" /><span class="True">      23:</span>     <span class="m">int</span>            <span class="b">complex_count</span><span class="f">;</span>    <span class="k">/* pending complex operations */</span>
<a name="24" /><span class="True">      24:</span> <span class="f">}</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="True">      26:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NZU1ZJUENfMA__"><span class="b">CONFIG_SYSVIPC</span></a>
<a name="27" /><span class="True">      27:</span> 
<a name="28" /><span class="True">      28:</span> <span class="m">struct</span> <span class="b">sysv_sem</span> <span class="f">{</span>
<a name="29" /><span class="True">      29:</span>     <span class="m">struct</span> <span class="b">sem_undo_list</span> <span class="f">*</span><span class="b">undo_list</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span> <span class="f">}</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> 
<a name="32" /><span class="True">      32:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">copy_semundo</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">clone_flags</span><span class="f">,</span> <span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">tsk</span><span class="f">)</span><span class="f">;</span>
<a name="33" /><span class="True">      33:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">exit_sem</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">tsk</span><span class="f">)</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> 
<a name="35" /><span class="False">      35:</span> <span class="f">#</span><span class="n">else</span>
<a name="36" /><span class="False">      36:</span> 
<a name="37" /><span class="False">      37:</span> <span class="m">struct</span> <span class="b">sysv_sem</span> <span class="f">{</span>
<a name="38" /><span class="False">      38:</span>     <span class="k">/* empty */</span>
<a name="39" /><span class="False">      39:</span> <span class="f">}</span><span class="f">;</span>
<a name="40" /><span class="False">      40:</span> 
<a name="41" /><span class="False">      41:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">copy_semundo</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">clone_flags</span><span class="f">,</span> <span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">tsk</span><span class="f">)</span>
<a name="42" /><span class="False">      42:</span> <span class="f">{</span>
<a name="43" /><span class="False">      43:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="44" /><span class="False">      44:</span> <span class="f">}</span>
<a name="45" /><span class="False">      45:</span> 
<a name="46" /><span class="False">      46:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">exit_sem</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">tsk</span><span class="f">)</span>
<a name="47" /><span class="False">      47:</span> <span class="f">{</span>
<a name="48" /><span class="False">      48:</span>     <span class="m">return</span><span class="f">;</span>
<a name="49" /><span class="False">      49:</span> <span class="f">}</span>
<a name="50" /><span class="True">      50:</span> <span class="f">#</span><span class="n">endif</span>
<a name="51" /><span class="True">      51:</span> 
<a name="52" /><span class="True">      52:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_SEM_H */</span>
<a name="53" /><span class="True">      53:</span> </pre>
  </body>
</html>
